home *** CD-ROM | disk | FTP | other *** search
/ Personal Computer World 2009 February / PCWFEB09.iso / Software / Linux / Kubuntu 8.10 / kubuntu-8.10-desktop-i386.iso / casper / filesystem.squashfs / usr / bin / lesspipe < prev    next >
Text File  |  2008-02-01  |  7KB  |  254 lines

  1. #!/bin/sh
  2. #
  3. # lessfile/lesspipe
  4. # $Id: lessopen,v 1.4 1998/05/12 09:37:46 torin Exp $
  5. # Plus POSIX sh changes by Y.Dirson
  6. #
  7. # Less filter for viewing non text files.
  8. #
  9. # Written by: Behan Webster <behanw@pobox.com>
  10. # Many Modifications by Darren Stalder
  11. # Further Modifications by Thomas Schoepf <schoepf@debian.org>
  12. #
  13. # combined lessfile and lesspipe to avoid duplication of decode stage
  14. # shell is sure icky.  I'm real tempted to rewrite the whole thing in Perl 
  15. #
  16. # Unfortunately, this means that I have filename dependencies sprinkled
  17. # throughout the code.  If you don't want lessfile to be called that,
  18. # you'll need to change the LESSFILE envar below.
  19. #
  20. # Usage: eval `lessfile`  or eval `lesspipe`
  21. #
  22. # less passes in:
  23. #    $1  filename to be viewed with less  (used by LESSOPEN)
  24. # and possibly (if used by lessfile)
  25. #    $2  filename that was created during LESSOPEN
  26.  
  27. TMPDIR=${TMPDIR:-/tmp}
  28. BASENAME=`basename $0`
  29. LESSFILE=lessfile
  30.  
  31. # Helper function to list contents of ISO files (CD images)
  32. iso_list() {
  33.     isoinfo -d -i "$1"
  34.     isoinfo -d -i "$1" | grep -q ^Rock\.Ridge && iiopts="$iiopts -R"
  35.     isoinfo -d -i "$1" | grep -q ^Joliet && iiopts="$iiopts -J"
  36.     echo
  37.     isoinfo -f $iiopts -i "$1"
  38. }
  39.  
  40. if [ $# -eq 1 ] ; then
  41.     # we were called as LESSOPEN
  42.  
  43.     # if the file doesn't exist, we don't do anything
  44.     if [ ! -r "$1" ]; then
  45.         exit 0
  46.     fi
  47.  
  48.     # generate filename for possible use by lesspipe
  49.     umask 077
  50.     if [ $BASENAME = $LESSFILE ]; then
  51.         TMPFILE=`tempfile -d $TMPDIR -p lessf`
  52.         if [ -z "$TMPFILE" ]; then
  53.             echo >&2 "Could not find essential program 'tempfile'. Exiting"
  54.       exit 1
  55.         fi
  56.     fi
  57.  
  58.     (
  59.         # possibly redirect stdout to a file for lessfile
  60.         if [ $BASENAME = $LESSFILE ]; then exec > $TMPFILE; fi
  61.  
  62.         # Allow for user defined filters
  63.         #if [ -x ~/.lessfilter -a -O ~/.lessfilter ]; then
  64.         if [ -x ~/.lessfilter ]; then
  65.             ~/.lessfilter "$1"
  66.             if [ $? -eq 0 ]; then
  67.                 if [ $BASENAME = $LESSFILE ]; then
  68.                     if [ -s $TMPFILE ]; then
  69.                         echo $TMPFILE
  70.                     else
  71.                         rm -f $TMPFILE
  72.                     fi
  73.                 fi
  74.                 exit 0
  75.             fi
  76.         fi
  77.  
  78.         # Decode file for less
  79.         case `echo "$1" | tr '[:upper:]' '[:lower:]'` in
  80.             *.arj)
  81.                 if [ -x "`which unarj`" ]; then unarj l "$1"
  82.                 else echo "No unarj available"; fi ;;
  83.  
  84.             *.tar.bz2)
  85.                 if [ -x "`which bunzip2`" ]; then
  86.                     bunzip2 -dc "$1" | tar tvvf -
  87.                 else echo "No bunzip2 available"; fi ;;
  88.  
  89.             *.bz)
  90.                 if [ -x "`which bunzip`" ]; then bunzip -c "$1"
  91.                 else echo "No bunzip available"; fi ;;
  92.  
  93.             *.bz2)
  94.                 if [ -x "`which bunzip2`" ]; then bunzip2 -dc "$1"
  95.                 else echo "No bunzip2 available"; fi ;;
  96.  
  97.             *.deb|*.udeb)
  98.                 echo "$1:"; dpkg --info "$1"
  99.                 echo
  100.                 echo '*** Contents:'; dpkg-deb --contents "$1"
  101.                 ;;
  102.  
  103.             *.doc)
  104.                 if [ -x "`which catdoc`" ]; then catdoc "$1"
  105.                 else echo "No catdoc available"; fi ;;
  106.  
  107.             *.gif|*.jpeg|*.jpg|*.pcd|*.png|*.tga|*.tiff|*.tif)
  108.                 if [ -x "`which identify`" ]; then
  109.                     identify "$1"
  110.                 else
  111.                     echo "No identify available"
  112.                     echo "Install ImageMagick to browse images"
  113.                 fi
  114.                 ;;
  115.  
  116.             *.iso)
  117.                 if [ -x "`which isoinfo`" ]; then iso_list "$1"
  118.                 else
  119.                     echo "No isoinfo available"
  120.                     echo "Install mkisofs to view ISO images"
  121.                 fi
  122.                 ;;
  123.  
  124.             *.bin|*.raw)
  125.                 if [ -x "`which isoinfo`" ]; then
  126.                     file "$1" | grep -q ISO\.9660 && iso_list "$1"
  127.                 else
  128.                     echo "No isoinfo available"
  129.                     echo "Install mkisofs to view ISO images"
  130.                 fi
  131.                 ;;
  132.  
  133.             *.lha|*.lzh)
  134.                 if [ -x "`which lha`" ]; then lha v "$1"
  135.                 else echo "No lha available"; fi ;;
  136.  
  137.             *.pdf)
  138.                 if [ -x "`which pdftotext`" ]; then pdftotext "$1" -
  139.                 else echo "No pdftotext available"; fi ;;
  140.  
  141.             *.rar|*.r[0-9][0-9])
  142.                 if [ -x "`which rar`" ]; then rar v "$1"
  143.                 elif [ -x "`which unrar`" ]; then unrar v "$1"
  144.                 else echo "No rar or unrar available"; fi ;;
  145.  
  146.             *.rpm)
  147.                 if [ -x "`which rpm`" ]; then
  148.                     echo "$1:"; rpm -q -i -p "$1"
  149.                     echo
  150.                     echo '*** Contents:'
  151.                     rpm -q -l -p "$1"
  152.                 else echo "rpm isn't available, no query on rpm package possible"; fi ;;
  153.  
  154.             *.tar.gz|*.tgz|*.tar.z|*.tar.dz)
  155.                 tar tzvf "$1" ;;
  156.  
  157.             # Note that this is out of alpha order so that we don't catch
  158.             # the gzipped tar files.
  159.             *.gz|*.z|*.dz)
  160.                 gzip -dc "$1" ;;
  161.  
  162.             *.tar)
  163.                 tar tvf "$1" ;;
  164.  
  165.             *.jar|*.war|*.ear|*.xpi|*.zip)
  166.                 if [ -x "`which unzip`" ]; then unzip -v "$1";
  167.                 elif [ -x "`which miniunzip`" ]; then miniunzip -l "$1";
  168.                 elif [ -x "`which miniunz`" ]; then miniunz -l "$1";
  169.                 else echo "No unzip, miniunzip or miniunz available"; fi ;;
  170.  
  171.             *.7z)
  172.                 if [ -x "`which 7za`" ]; then 7za l "$1";
  173.                 else echo "No 7za available"; fi ;;
  174.  
  175.             *.zoo)
  176.                 if [ -x "`which zoo`" ]; then zoo v "$1";
  177.                 elif [ -x "`which unzoo`" ]; then unzoo -l "$1";
  178.                 else echo "No unzoo or zoo available"; fi ;;
  179.  
  180.         esac
  181.     ) 2>/dev/null
  182.  
  183.     if [ $BASENAME = $LESSFILE ]; then
  184.         if [ -s $TMPFILE ]; then
  185.             echo $TMPFILE
  186.         else
  187.             rm -f $TMPFILE
  188.         fi
  189.     fi
  190.  
  191. elif [ $# -eq 2 ] ; then
  192.     #
  193.     # we were called as LESSCLOSE
  194.     # delete the file created if we were lessfile
  195.     #
  196.     if [ $BASENAME = $LESSFILE ]; then
  197.     if [ -n "$BASH" ]; then
  198.       if [ ! -O "$2" ]; then
  199.         echo "Error in deleting $2" > /dev/tty
  200.       fi
  201.     fi
  202.  
  203.         if [ -f "$2" ]; then
  204.             rm -f "$2"
  205.         else
  206.             echo "Error in deleting $2" > /dev/tty
  207.         fi
  208.     fi
  209.  
  210. elif [ $# -eq 0 ] ; then
  211.     #
  212.     # must setup shell to use LESSOPEN/LESSCLOSE
  213.     #
  214.     # I have no idea how some of the more esoteric shells (es, rc) do
  215.     # things. If they don't do things in a Bourne manner, send me a patch
  216.     # and I'll incorporate it.
  217.     #
  218.  
  219.     # first determine the full path of lessfile/lesspipe
  220.     # if you can determine a better way to do this, send me a patch, I've
  221.     # not shell-scripted for many a year.
  222.     FULLPATH=`cd \`dirname $0\`;pwd`/$BASENAME
  223.  
  224.     case "$SHELL" in
  225.         *csh)
  226.             if [ $BASENAME = $LESSFILE ]; then
  227.                 echo "setenv LESSOPEN \"$FULLPATH %s\";"
  228.                 echo "setenv LESSCLOSE \"$FULLPATH %s %s\";"
  229.             else
  230.                 echo "setenv LESSOPEN \"| $FULLPATH %s\";"
  231.                 echo "setenv LESSCLOSE \"$FULLPATH %s %s\";"
  232.             fi
  233.             ;;
  234.         *)
  235.             if [ $BASENAME = $LESSFILE ]; then
  236.                 echo "export LESSOPEN=\"$FULLPATH %s\";"
  237.                 echo "export LESSCLOSE=\"$FULLPATH %s %s\";"
  238.             else
  239.                 echo "export LESSOPEN=\"| $FULLPATH %s\";"
  240.                 echo "export LESSCLOSE=\"$FULLPATH %s %s\";"
  241.             fi
  242.             ;;
  243.     esac
  244.  
  245.     #echo "# If you tried to view a file with a name that starts with '#', you"
  246.     #echo "# might see this message instead of the file's contents."
  247.     #echo "# To view the contents, try to put './' ahead of the filename when"
  248.     #echo "# calling less."
  249.  
  250. else
  251.     echo "Usage: eval \`$BASENAME\`"
  252.     exit
  253. fi
  254.